Application streaming provides the ability for an endpoint (e.g., a client computer) to run an application locally that is stored remotely, for example on a server. The server transmits specific portions of the application (e.g., code pages) to the endpoint, as the endpoint needs them. Application streaming offers a number of advantages over running the application on the server. Streaming the application allows the application to execute locally on the endpoint, instead of remotely on the server. This eliminates the need for large farms of servers to provide applications to a plurality of client computers. Application response time to the user is also significantly faster when the application is run locally on the endpoint, as opposed to remotely on the server. Commercial application streaming technology exists today.
A network file system is a computer file system that supports sharing of resources such as files, printers and/or persistent storage over a computer network. Network file systems such as Andrew File System (AFS), NetWare Core Protocol (NCP), and Server Message Block (SMB, also known as Common Internet File System (CIFS)) exist today. Network file systems can share files, including executable files, between servers and endpoints.
An important performance measurement of a network file system is the amount of time needed to satisfy service requests. In conventional file systems, this time consists of a disk-access time and a small amount of CPU-processing time. But in a network file system, a remote access has additional overhead due to the distributed structure. This includes the time to deliver the request to a server, the time to deliver the response to the client, and for each direction, a CPU overhead of running the communication protocol software.
Both application streaming technologies and network file systems can be used to execute applications stored on a remote server on a local endpoint. However, current application streaming technologies and network file systems do not take into account what sections of a given executable file need to be pushed to the endpoint. This results in either poor performance or failure of the application. This is a particular problem for mobile users, who are often connected to the server from which the application is originating through a poor performing network, and for wireless users, whose network performance can significantly vary depending on signal strength and interference.
In many existing implementations of application streaming technologies and network file systems, an agent runs on the endpoint, monitors the execution of the application, and pulls code pages from the server when necessary. In such implementations, the agent typically leverages exceptions to obtain non-present code pages that are needed for application execution to continue. In other words, when the application running on the endpoint does not have a code page it needs, it throws an exception. Responsive to the exception, the agent pulls the needed code page from the server. The process of the application throwing exceptions and the agent responsively pulling missing code pages creates a significant performance delay. Typically, the agent caches the pages on the endpoint after they have been pulled. However, every time the application requires a non-present, non-cached code page, the exception, page pulling process is repeated. Additionally, whenever an application is updated or patched (which happens quite frequently), the agent must pull new blocks/binaries, and the application again suffers significant performance degradation.
In some implementations, there is no agent on the endpoint to monitor the application and pull required contents. Under these implementations, the server has to blindly push the application content irrespective of the execution pattern on the endpoint. This is obviously not desirable, because the application cannot execute until it has been completely pushed to the endpoint, or else the application fails intermittently when required sections are not yet available. This is often the case with existing network file systems, where the application execution is significantly delayed or slowed down till the entire application binary has been pushed to the endpoint.
It would be desirable to have application streaming technology and network file systems that do not have these problems.